#include <stdio.h>

// 假设数组为全局变量（或通过参数传入），需保证升序排序
int a[] = { 1, 2, 2, 2, 5, 6, 8, 9 };
#define LEN (sizeof(a) / sizeof(a[0]))  // 计算数组长度

// 二分查找函数：在升序数组a中查找number，返回索引（不存在返回-1）
int binarysearch(int number) {
    int start = 0, end = LEN - 1;
    int result = -1;  // 记录第一个匹配元素的索引
    while (start <= end) {
        int mid = (start + end) / 2;
        if (a[mid] == number) {
            result = mid;  // 暂时记录当前位置
            end = mid - 1; // 继续向左查找更早的匹配元素
        } else if (a[mid] < number) {
            start = mid + 1;
        } else {
            end = mid - 1;
        }
    }
    return result;  // 若找到则返回第一个索引，否则返回-1
}

// 测试示例
int main() {
    int target = 7;
    int index = binarysearch(target);
    if (index != -1) {
        printf("找到元素 %d，索引为 %d\n", target, index);
    } else {
        printf("未找到元素 %d\n", target);
    }
    return 0;
}
